package persistencia.dao;

import org.hibernate.Query;
import persistencia.hbt.HibernateUtil;
import bean.EntidadPersistente;
import bean.OficinaDeVenta;
import bean.RemitoODV;

public class RemitoODVDAO extends EntidadPersistenteDAO {
	private static RemitoODVDAO instancia = null;
	
	public static RemitoODVDAO getInstancia(){
		if(instancia == null)
			instancia = new RemitoODVDAO();
		
		if (session == null)
			session = HibernateUtil.getSession();
		
		return instancia;
	}
	
	public RemitoODV buscar(EntidadPersistente entidad)
	{
		RemitoODV rem = (RemitoODV) entidad;
		
		if (rem.getId() != null)
			return (RemitoODV) super.buscar(rem);
		else if (rem.getNumeroRemito() != null && rem.getOficinaDeVenta() != null)
			return this.buscar(rem.getNumeroRemito(), rem.getOficinaDeVenta());
		
		return null;
	}
	
	private RemitoODV buscar(Integer numeroRemito, OficinaDeVenta odv){
		Query query = session.createQuery(" from RemitoODV r where r.numeroRemito = :num and r.oficinaDeVenta = :odv");
		query.setInteger("num", numeroRemito);
		query.setEntity("odv", odv);
		
		RemitoODV r = (RemitoODV) query.setFirstResult(0).setMaxResults(1).uniqueResult();
		return r;
	}
	
	public Integer obtenerMayorNumeroDeRemito()
	{
		Query query = session.createQuery(" select max(r.numeroRemito) from RemitoODV r");
		Integer mayorNumero = (Integer) query.setFirstResult(0).setMaxResults(1).uniqueResult();

		return (mayorNumero == null? 0: mayorNumero);
	}

}
